import BMI对比公式
import openpyxl
import time
import sys
from docx import Document
from docx.shared import Pt, Cm, Mm
from docx.oxml.ns import qn
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

from PyQt5 import QtCore
import datetime
from 学校体检GUI import Ui_MainWindow
import threading
from PyQt5.QtWidgets import QFileDialog, QGraphicsObject, QMainWindow, QApplication
class School(QMainWindow, Ui_MainWindow, QGraphicsObject):
    # 定义信号1 作用触发 携带信息为字符串
    signal1 = QtCore.pyqtSignal(str)
    # 定义信号2 作用触发 携带信息为字符串
    signal2 = QtCore.pyqtSignal(str)

    def __init__(self):
        # 初始化控件类
        super().__init__()
        self.setupUi(self)
        # 信号一与self.textBrowser捆绑 用来传输文字信息
        self.signal1.connect(self.Qtext_B)
        # 信号一与self.textBrowser_2捆绑 用来传输文字信息
        self.signal2.connect(self.Qtext_C)
        self.filepath1 = ""
        self.fileName1 = ""
        # 初始化防盗加密
        self.fangwei()

    def fangwei(self):
        with open('config.inf', 'r') as f:
            file1 = f.read()
            file = file1.split('=')
            file2 = ''.join(file[1])
            key1 = file2[-4:-2]
            key = int(key1) - 1
            if key < 10:
                if key <= 0:
                    key2 = '00'
                    file4 = file2.replace(file2[-4:-2], key2)
                else:
                    key2 = '0' + str(key)
                    file4 = file2.replace(file2[-4:-2], key2)
            else:
                file4 = file2.replace(file2[-4:-2], str(key))

        with open('config.inf', 'w') as f:
            f.write('MD5 ' + '=' + file4)
            f.close()

        if starttime < datetime.datetime(2024, 12, 1) and int(key) > 0:
            self.pushButton.clicked.connect(self.open_file)
            self.pushButton_6.clicked.connect(lambda: self.thread_j(self.jc_q))
            self.pushButton_2.clicked.connect(lambda: self.thread_j(self.calculate))
            self.pushButton_4.clicked.connect(lambda: self.thread_j(self.wirt_File))
            self.pushButton_5.clicked.connect(lambda: self.thread_j(self.Sum_result))
            self.pushButton_3.clicked.connect(lambda: self.thread_j(self.Baogao))

        else:
            self.pushButton.setEnabled(False)
            self.pushButton_6.setEnabled(False)
            self.pushButton_2.setEnabled(False)
            self.pushButton_4.setEnabled(False)
            self.pushButton_5.setEnabled(False)
            self.pushButton_3.setEnabled(False)

    def open_file(self):
        """
        按钮打开文件
        """
        filename, filetype = QFileDialog.getOpenFileName(self, "选取Excel文件", "./data", "Excel Files (*.xls *.xlsx)")
        self.fashe(f'打开文件路径{filename}')
        # 将全局变量用来存储 文件路径
        self.filepath1 = filename
        # 将全局变量用来存储 处理以后的文件名
        self.fileName1 = self.filepath1.split('/')[-1].split('.')[0]

    def jc_q(self):
        """
        主要作用检查到检情况年龄身高体重视力参数输入是否正确
        """
        # 读取体检数据文件
        workbook = openpyxl.load_workbook(f"{self.filepath1}")
        self.fashe(f"开始处理{self.filepath1}")
        # 获取体检数据表名[列表形式]
        books = workbook.sheetnames
        for page in books:
            max_row = workbook[f'{page}'].max_row
            sheet = workbook[f'{page}']
            if sheet['A3'].value is None:
                self.fashe2(f"{page}录入者未填写请注意检查！")

            for row in range(3, max_row + 1):
                # 先检查到检数据
                if sheet[f'G{row}'].value is None:
                    self.fashe2(f"{page}{sheet[f'D{row}'].value}到检数据为空！")
                    pass
                elif isinstance(sheet[f'G{row}'].value, str):
                    try:
                        float(sheet[f'G{row}'].value)
                    except ValueError:
                        self.fashe2(f"{page}{sheet[f'D{row}'].value}到检数据不能填写汉字！")
                elif int(sheet[f'G{row}'].value) > 1:
                    self.fashe2(f"{page}{sheet[f'D{row}'].value}到检数据只接受 1或者0 到检或者未到检")
                elif sheet[f'G{row}'].value == 0:
                    pass
                else:
                    # 检查性别是否已填 已编写完毕
                    if sheet[f'E{row}'].value == '男' or sheet[f'E{row}'].value == '女':
                        pass
                    else:
                        self.fashe2(f"{page}{sheet[f'D{row}'].value}性别异常请注意检查！")

                    # 检查身份证号码
                    if sheet[f'F{row}'].value is None:
                        if sheet[f'H{row}'].value is None:
                            self.fashe2(f"{page}{sheet[f'D{row}'].value}身份证号码没有！")
                        else:
                            pass
                    else:
                        if len(str(sheet[f'F{row}'].value)) < 18:
                            self.fashe2(f"{page}{sheet[f'D{row}'].value}身份证号码不足18位！")
                        else:
                            pass

                    # 检查年龄是否已填 已编写完毕
                    if sheet[f'F{row}'].value is None and sheet[f'H{row}'].value is None:
                        self.fashe2(f"{page}{sheet[f'D{row}'].value}身份证号码与年龄都没有")
                    else:
                        if isinstance(sheet[f'H{row}'].value, str):
                            try:
                                float(sheet[f'H{row}'].value)
                            except ValueError:
                                self.fashe2(f"{page}{sheet[f'D{row}'].value}年龄不能填写汉字")
                        else:
                            pass

                    # 检查身高录入情况
                    if sheet[f'L{row}'].value is None:
                        self.fashe2(f"{page}{sheet[f'D{row}'].value}身高未填请检查！")
                    elif isinstance(sheet[f'L{row}'].value, str):
                        try:
                            float(sheet[f'L{row}'].value)
                        except ValueError:
                            self.fashe2(f"{page}{sheet[f'D{row}'].value}身高不能填写汉字 未参检 请标红字！")
                    elif float(sheet[f'L{row}'].value) > 10:
                        self.fashe2(f"{page}{sheet[f'D{row}'].value}身高{sheet[f'L{row}'].value}请注意检查！")
                    else:
                        pass

                    # 检查体重录入
                    if sheet[f'M{row}'].value is None:
                        self.fashe2(f"{page}{sheet[f'D{row}'].value}请核实体重是否参检！")
                    elif isinstance(sheet[f'M{row}'].value, str):
                        try:
                            float(sheet[f'M{row}'].value)
                        except ValueError:
                            self.fashe2(f"{page}{sheet[f'D{row}'].value}身高不能填写汉字 未参检 请标红字！")
                    elif float(sheet[f'M{row}'].value) > 150:
                        self.fashe2(f"{page}{sheet[f'D{row}'].value}体重{sheet[f'M{row}'].value}请注意检查！")
                    else:
                        pass

                    # 根据复选框当前状态来检查视力录入是否符合标准
                    if self.checkBox_2.isChecked():
                        if self.checkBox.isChecked():
                            #  判断是否为空
                            if not sheet[f'AA{row}'].value and not sheet[f'AB{row}'].value:
                                self.fashe2(f"{page}{sheet[f'D{row}'].value}视力未填请检查是否参检  未参检不填！")
                            #  判断值是否为字符串和是否可以转换为数字
                            elif isinstance(sheet[f'AA{row}'].value, str) or isinstance(sheet[f'AB{row}'].value, str):
                                try:
                                    float(sheet[f'AA{row}'].value)
                                    float(sheet[f'AB{row}'].value)
                                except ValueError:
                                    self.fashe2(f"{page}{sheet[f'D{row}'].value}视力不能填写汉字！")
                            #  判断值是否为数字类型并比较大小
                            elif isinstance(sheet[f'AA{row}'].value, (int, float)) and isinstance(
                                    sheet[f'AB{row}'].value, (int, float)):
                                if float(sheet[f'AA{row}'].value) < 3 or float(sheet[f'AB{row}'].value) < 3:
                                    self.fashe2(f"{page}{sheet[f'D{row}'].value}国标视力异常请注意检查！")
                            else:
                                pass
                        else:
                            #  判断是否为空
                            if not sheet[f'AA{row}'].value and not sheet[f'AB{row}'].value:
                                self.fashe2(f"{page}{sheet[f'D{row}'].value}视力未填请检查是否参检  未参检不填！")
                            #  判断值是否为字符串和是否可以转换为数字
                            elif isinstance(sheet[f'AA{row}'].value, str) or isinstance(sheet[f'AB{row}'].value, str):
                                try:
                                    float(sheet[f'AA{row}'].value)
                                    float(sheet[f'AB{row}'].value)
                                except ValueError:
                                    self.fashe2(f"{page}{sheet[f'D{row}'].value}视力不能填写汉字！")
                            #  判断值是否为数字类型并比较大小
                            elif isinstance(sheet[f'AA{row}'].value, (int, float)) and isinstance(
                                    sheet[f'AB{row}'].value, (int, float)):
                                if float(sheet[f'AA{row}'].value) > 3 or float(sheet[f'AB{row}'].value) > 3:
                                    self.fashe2(f"{page}{sheet[f'D{row}'].value}国标视力异常请注意检查！")
                            else:
                                pass
                    else:
                        pass
                self.fashe(f"{page}处理完毕")
        return self.fashe('检查完毕，请根据情况进行处理！')

    def calculate(self):
        """
        根据电子化数据计算 BMI、BMI修正值、身高对比结果、视力对比结果
        """
        # 读取体检数据文件
        workbook = openpyxl.load_workbook(f"{self.filepath1}")
        self.fashe(f"开始计算{self.filepath1}")
        # 获取体检数据表名[列表形式]
        books = workbook.sheetnames

        for page in books:
            self.fashe(f"开始处理{page}")
            # 从文件中调取页面进行处理
            sheet = workbook[f"{page}"]
            # 获取文件最大列 转换成数字类型
            max = sheet.max_row
            self.fashe(f"最大列数为：{max}")
            maxnum1 = max + 1
            # 开始迭代式循环处理数据
            for i in range(3, maxnum1):
                # 先计算年龄 通过身份证号码来计算 先判断是否为空 为空不进行计算
                if (sheet[f'H{i}'].value is None and sheet[f'F{i}'].value is None) or sheet[f'F{i}'].value == 0:
                    pass
                else:
                    if sheet[f'H{i}'].value:
                        pass
                    elif len(str(sheet[f'F{i}'].value)) < 18:
                        self.fashe2(f"{page}{sheet[f'D{i}'].value}身份证号码无效请注意检查！")
                    else:
                        sheet[f'H{i}'].value = 2023 - int(sheet[f'F{i}'].value[6:10])

                # 如果到检情况未空 或者为0 就不进行计算这个人其他数据
                if sheet[f'G{i}'].value is None or sheet[f'G{i}'].value == 0:
                    pass
                else:
                    # BMI 计算 先判断空 为空不判断
                    if sheet[f'M{i}'].value is None or sheet[f'L{i}'].value is None:
                        pass
                    else:
                        # 身高体重 如果不是数字 也不进行计算
                        if isinstance(sheet[f'M{i}'].value, str) or isinstance(sheet[f'L{i}'].value, str):
                            try:
                                float(sheet[f'M{i}'].value)
                                float(sheet[f'L{i}'].value)
                            except ValueError:
                                pass
                        else:
                            sheet[f'N{i}'].value = bmi.BMI_result(float(sheet[f'M{i}'].value),
                                                                  float(sheet[f'L{i}'].value))
                            sheet[f'O{i}'].value = round(sheet[f'N{i}'].value, 2)
                            self.fashe(f"{page}{sheet[f'D{i}'].value}BMI为{sheet[f'O{i}'].value}")

                    # 体重结果对比 性别 年龄 身高 先判断空 空不计算
                    if sheet[f'E{i}'].value is None or sheet[f'H{i}'].value is None or sheet[f'O{i}'].value is None:
                        pass
                    else:
                        if sheet[f'E{i}'].value == '男':
                            sheet[f'P{i}'].value = bmi.hight_Bmi_Man(sheet[f'H{i}'].value, sheet[f'O{i}'].value)
                            self.fashe(f"{sheet[f'D{i}'].value}性别男体重对比结果为：{sheet[f'P{i}'].value}")
                        else:
                            sheet[f'P{i}'].value = bmi.hight_Bmi_Woman(sheet[f'H{i}'].value, sheet[f'O{i}'].value)
                            self.fashe(f"{sheet[f'D{i}'].value}性别女体重对比结果为：{sheet[f'P{i}'].value}")
                        # 计算身高对比结果
                        if sheet[f'L{i}'].value is None or sheet[f'H{i}'].value is None:
                            pass
                        else:
                            if sheet[f'E{i}'].value == '男':
                                sheet[f'Q{i}'].value = bmi.hight_man(sheet[f'H{i}'].value, sheet[f'L{i}'].value)
                            else:
                                sheet[f'Q{i}'].value = bmi.hight_woman(sheet[f'H{i}'].value, sheet[f'L{i}'].value)
                        # 根据复选框状态计算视力结果
                        if self.checkBox_2.isChecked():
                            if self.checkBox.isChecked():
                                if sheet[f'AA{i}'].value is None or sheet[f'AB{i}'].value is None:
                                    pass
                                else:
                                    if sheet[f'AA{i}'].value == '未测' or sheet[f'AB{i}'].value == '未测':
                                        pass
                                    else:
                                        a = float(sheet[f'AA{i}'].value)
                                        b = float(sheet[f'AB{i}'].value)
                                        if a > b:
                                            sheet[f'AD{i}'].value = bmi.eyesight3(b)
                                            self.fashe(f"{sheet[f'D{i}'].value}视力对比结果为：{sheet[f'AD{i}'].value}")
                                        if a < b:
                                            sheet[f'AD{i}'].value = bmi.eyesight3(a)
                                            self.fashe(f"{sheet[f'D{i}'].value}视力对比结果为：{sheet[f'AD{i}'].value}")
                                        if a == b:
                                            sheet[f'AD{i}'].value = bmi.eyesight3(a)
                                            self.fashe(f"{sheet[f'D{i}'].value}视力对比结果为：{sheet[f'AD{i}'].value}")
                            else:
                                if sheet[f'AA{i}'].value is None or sheet[f'AB{i}'].value is None:
                                    pass
                                else:
                                    if sheet[f'AA{i}'].value == '未测' or sheet[f'AB{i}'].value == '未测':
                                        pass
                                    else:
                                        a = float(sheet[f'AA{i}'].value)
                                        b = float(sheet[f'AB{i}'].value)
                                        if a > b:
                                            sheet[f'AD{i}'].value = bmi.eyesight1(b)
                                            self.fashe(f"{sheet[f'D{i}'].value}视力对比结果为：{sheet[f'AD{i}'].value}")
                                        if a < b:
                                            sheet[f'AD{i}'].value = bmi.eyesight1(a)
                                            self.fashe(f"{sheet[f'D{i}'].value}视力对比结果为：{sheet[f'AD{i}'].value}")
                                        if a == b:
                                            sheet[f'AD{i}'].value = bmi.eyesight1(a)
                                            self.fashe(f"{sheet[f'D{i}'].value}视力对比结果为：{sheet[f'AD{i}'].value}")
                        else:
                            pass

            workbook.save(f'./report/{self.fileName1}体检数据明细表.xlsx')

        return self.fashe('计算完毕，可以进行下一步')

    def wirt_File(self):
        """
        根据计算出来的数据生成卫健委要求的附件1-4
        """
        # 读取体检数据文件
        workbook = openpyxl.load_workbook(f"./report/{self.fileName1}体检数据明细表.xlsx")
        # 获取体检数据表名[列表形式]
        books = workbook.sheetnames
        for page in books:
            fujian = {
                "班级": "",
                "总人数": "",
                "未到人数": "",
                "到检人数": "",
                "检查率": "",
                "心脏异常": "",
                "心脏异常百分比": "",
                "肺部异常": "",
                "肺部异常百分比": "",
                "肝/脾异常": "",
                "肝/脾异常百分比": "",
                "头部异常": "",
                "头部异常百分比": "",
                "颈异常": "",
                "颈异常百分比": "",
                "胸部异常": "",
                "胸部异常百分比": "",
                "脊柱异常": "",
                "脊柱异常百分比": "",
                "四肢异常": "",
                "四肢异常百分比": "",
                "皮肤异常": "",
                "皮肤异常百分比": "",
                "淋巴结异": "",
                "淋巴结异百分比": "",
                "沙眼异常": "",
                "沙眼异常百分比": "",
                "牙周异常": "",
                "牙周异常百分比": "",
                "鼻异常": "",
                "鼻异常百分比": "",
                "喉/扁桃体异常": "",
                "喉/扁桃体异常百分比": "",
                "轻度视力不良": "",
                "轻度视力不良百分比": "",
                "中度视力不良": "",
                "中度视力不良百分比": "",
                "重度视力不良": "",
                "重度视力不良百分比": "",
                "耳异常": "",
                "耳异常百分比": "",
                "龋齿异常": "",
                "龋齿异常百分比": "",
                "男性人数": "",
                "女性人数": "",
                "男性消瘦": "",
                "男性超重": "",
                "男性肥胖": "",
                "男性生长迟缓": "",
                "女性消瘦": "",
                "女性超重": "",
                "女性肥胖": "",
                "女性生长迟缓": "",
            }
            self.fashe(f"开始处理{page}数据")
            # 从文件中调取页面进行处理
            sheet = workbook[f"{page}"]
            # 体检总人数
            zrs = bmi.count(sheet["D"])
            self.fashe(f"{page}体检总人数：{zrs}")

            # 实际体检到检人数
            djrs = bmi.daojiancount(sheet["G"])
            self.fashe(f"{page}实际到检人数：{djrs}")

            # 班级性别人数
            gender = bmi.gender(sheet["E"])
            # 男性人数
            man = gender[0]
            # 女性人数
            woman = gender[1]
            self.fashe(f"{page}男性人数{man}女性人数{woman}")

            # 心脏异常人数
            heart = bmi.count(sheet["I"])
            self.fashe(f"{page}心脏 异常人数{heart}")

            # 肺部异常人数
            lung = bmi.count(sheet["J"])
            self.fashe(f"{page}肺部 异常人数{lung}")

            # 肝/脾异常人数
            liver_and_spleen = bmi.count(sheet["K"])
            self.fashe(f"{page}肝/脾 异常人数{lung}")

            # 头部异常人数
            head = bmi.count(sheet["R"])
            self.fashe(f"{page}头部 异常人数{head}")

            # 颈异常人数
            neck = bmi.count(sheet["S"])
            self.fashe(f"{page}颈部 异常人数{neck}")


            # 胸部异常人数
            chest = bmi.count(sheet["T"])
            self.fashe(f"{page}胸部 异常人数{chest}")

            # 脊柱异常人数
            spine = bmi.count(sheet["U"])
            self.fashe(f"{page}脊柱 异常人数{spine}")

            # 四肢异常人数
            all_fours = bmi.count(sheet["V"])
            self.fashe(f"{page}四肢 异常人数{all_fours}")

            # 皮肤异常人数
            skin = bmi.count(sheet["W"])
            self.fashe(f"{page}皮肤 异常人数{skin}")

            # 淋巴结异常人数
            lymph_gland = bmi.count(sheet["X"])
            self.fashe(f"{page}淋巴结 异常人数{lymph_gland}")

            # 结膜异常人数
            conjunctiva = bmi.count(sheet["AM"])
            self.fashe(f"{page}结膜 异常人数{conjunctiva}")

            # 沙眼异常人数
            trachoma = bmi.count(sheet["AN"])
            self.fashe(f"{page}沙眼 异常人数{trachoma}")

            # 耳异常人数
            ear = bmi.count(sheet["AO"])
            self.fashe(f"{page}耳 异常人数{ear}")

            # 鼻异常人数
            nose = bmi.count(sheet["AP"])
            self.fashe(f"{page}鼻 异常人数{nose}")

            # 喉/扁桃体异常人数
            tonsil = bmi.count(sheet["AQ"])
            self.fashe(f"{page}喉/扁桃体 异常人数{tonsil}")

            # 龋齿异常人数
            decayed_tooth = bmi.count(sheet["AR"])
            self.fashe(f"{page}龋齿 异常人数{decayed_tooth}")

            # 牙周异常人数
            periodontal = bmi.count(sheet["AS"])
            self.fashe(f"{page}牙周 异常人数{periodontal}")

            # 视力判定统计
            shili = bmi.shilicount(sheet["AD"])
            self.fashe(f"{page}轻度视力{shili[0]},中度视力{shili[1]},重度视力{shili[2]}")

            # 未到学生人数
            Nopepo = int(zrs) - int(djrs)
            # 检查率
            Jcl = bmi.baifenbi(float(djrs), float(zrs))
            if Jcl == 0:
                self.fashe2(f'{page}的到检人数{float(djrs)}异常以及{float(zrs)}异常请注意查看！')
            # 计算 BMI对比结果
            shengzhang = bmi.shengzhang(zip(sheet["E"], sheet["P"]))
            # 计算 身高对比结果
            shengao = bmi.shengaojieguo(zip(sheet["E"], sheet["Q"]))
            fujian["班级"] = page
            fujian["总人数"] = zrs
            fujian["未到人数"] = Nopepo
            fujian["到检人数"] = djrs
            fujian["检查率"] = Jcl
            fujian["心脏异常"] = heart
            fujian["心脏异常百分比"] = bmi.baifenbi(heart, djrs)
            fujian["肺部异常"] = lung
            fujian["肺部异常百分比"] = bmi.baifenbi(lung, djrs)
            fujian["肝/脾异常"] = liver_and_spleen
            fujian["肝/脾异常百分比"] = bmi.baifenbi(liver_and_spleen, djrs)
            fujian["头部异常"] = head
            fujian["头部异常百分比"] = bmi.baifenbi(head, djrs)
            fujian["颈异常"] = neck
            fujian["颈异常百分比"] = bmi.baifenbi(neck, djrs)
            fujian["胸部异常"] = chest
            fujian["胸部异常百分比"] = bmi.baifenbi(chest, djrs)
            fujian["脊柱异常"] = spine
            fujian["脊柱异常百分比"] = bmi.baifenbi(spine, djrs)
            fujian["四肢异常"] = all_fours
            fujian["四肢异常百分比"] = bmi.baifenbi(all_fours, djrs)
            fujian["皮肤异常"] = skin
            fujian["皮肤异常百分比"] = bmi.baifenbi(skin, djrs)
            fujian["淋巴结异"] = lymph_gland
            fujian["淋巴结异百分比"] = bmi.baifenbi(lymph_gland, djrs)
            fujian["沙眼异常"] = trachoma
            fujian["沙眼异常百分比"] = bmi.baifenbi(trachoma, djrs)
            fujian["牙周异常"] = periodontal
            fujian["牙周异常百分比"] = bmi.baifenbi(periodontal, djrs)
            fujian["鼻异常"] = nose
            fujian["鼻异常百分比"] = bmi.baifenbi(nose, djrs)
            fujian["喉/扁桃体异常"] = tonsil
            fujian["喉/扁桃体异常百分比"] = bmi.baifenbi(tonsil, djrs)
            fujian["轻度视力不良"] = shili[0]
            fujian["轻度视力不良百分比"] = bmi.baifenbi(shili[0], djrs)
            fujian["中度视力不良"] = shili[1]
            fujian["中度视力不良百分比"] = bmi.baifenbi(shili[1], djrs)
            fujian["重度视力不良"]= shili[2]
            fujian["重度视力不良百分比"] = bmi.baifenbi(shili[2], djrs)
            fujian["耳异常"] = ear
            fujian["耳异常百分比"] = bmi.baifenbi(ear, djrs)
            fujian["龋齿异常"] = decayed_tooth
            fujian["龋齿异常百分比"] = bmi.baifenbi(decayed_tooth, djrs)
            fujian["男性人数"] = man
            fujian["女性人数"] = woman
            fujian["男性消瘦"] = shengzhang[0]
            fujian["男性超重"] = shengzhang[1]
            fujian["男性肥胖"] = shengzhang[2]
            fujian["男性生长迟缓"] = shengao[0]
            fujian["女性消瘦"] = shengzhang[3]
            fujian["女性超重"] = shengzhang[4]
            fujian["女性肥胖"] = shengzhang[5]
            fujian["女性生长迟缓"] = shengao[1]
            # 附件一生成
            bmi.wirte_f1(fujian)
            # 附件二生成
            bmi.wirte_f2(fujian)
            # 附件三生成
            bmi.wirte_f3(fujian)
            # 数据汇总 附件四生成
            bmi.wirte_f4(fujian)
        return self.fashe('报告已经生成完毕 可以进行下一步')

    def thread_j(self, massage):
        t = threading.Thread(target=massage, daemon=True)
        t.start()

    def Qtext_B(self, message):
        """
        文本框 实时显示自定义函数
        """
        self.textBrowser.append(message)  # 在指定的区域显示提示信息

    def Qtext_C(self, message):
        """
        文本框 实时显示自定义函数
        """
        data_time = str(datetime.datetime.now())
        # 在指定的区域显示提示信息
        self.textBrowser_2.append(message)
        with open("./log/log.txt", 'a', encoding='utf-8') as file:
            file.write(f'{data_time}——→{message}')
            file.write('\n')
            file.close()
            return print('已写入日志')

    def fashe(self, zidan):
        """
        发射信号函数 使信号与传递的值进行绑定携带
        """
        self.signal1.emit(zidan)

    def fashe2(self, zidan):
        """
                发射信号函数 使信号与传递的值进行绑定携带
                """
        self.signal2.emit(zidan)

    def Sum_result(self):
        """
        根据上每个班级的计算数据进行追加全校数据汇总
        """
        workbook = openpyxl.load_workbook("./report/附件四学生健康体检数据汇总.xlsx")
        self.fashe("读取附件四学生健康体检数据汇总.xlsx")
        sheet = workbook['Sheet1']
        max = sheet.max_row
        self.fashe(f"附件4最大行数为：{max}")
        Sum_result1 = max + 1
        self.fashe(f"附件4汇总行数为：{Sum_result1}")
        sheet[f'A{Sum_result1}'].value = '数据汇总'
        sheet[f'B{Sum_result1}'].value = bmi.Sumhe(sheet["B"][1:max])
        sheet[f'C{Sum_result1}'].value = bmi.Sumhe(sheet["C"][1:max])
        sheet[f'D{Sum_result1}'].value = bmi.Sumhe(sheet["D"][1:max])
        sheet[f'E{Sum_result1}'].value = bmi.Sumhe(sheet["E"][1:max])
        sheet[f'F{Sum_result1}'].value = bmi.Sumhe(sheet["F"][1:max])
        sheet[f'G{Sum_result1}'].value = bmi.Sumhe(sheet["G"][1:max])
        sheet[f'H{Sum_result1}'].value = bmi.Sumhe(sheet["H"][1:max])
        sheet[f'I{Sum_result1}'].value = bmi.Sumhe(sheet["I"][1:max])
        sheet[f'J{Sum_result1}'].value = bmi.Sumhe(sheet["J"][1:max])
        sheet[f'K{Sum_result1}'].value = bmi.Sumhe(sheet["K"][1:max])
        sheet[f'L{Sum_result1}'].value = bmi.Sumhe(sheet["L"][1:max])
        sheet[f'M{Sum_result1}'].value = bmi.Sumhe(sheet["M"][1:max])
        sheet[f'N{Sum_result1}'].value = bmi.Sumhe(sheet["N"][1:max])
        sheet[f'O{Sum_result1}'].value = bmi.Sumhe(sheet["O"][1:max])
        sheet[f'P{Sum_result1}'].value = bmi.Sumhe(sheet["P"][1:max])
        sheet[f'Q{Sum_result1}'].value = bmi.Sumhe(sheet["Q"][1:max])
        sheet[f'R{Sum_result1}'].value = bmi.Sumhe(sheet["R"][1:max])
        sheet[f'S{Sum_result1}'].value = bmi.Sumhe(sheet["S"][1:max])
        sheet[f'T{Sum_result1}'].value = bmi.Sumhe(sheet["T"][1:max])
        sheet[f'U{Sum_result1}'].value = bmi.Sumhe(sheet["U"][1:max])
        sheet[f'V{Sum_result1}'].value = bmi.Sumhe(sheet["V"][1:max])
        sheet[f'W{Sum_result1}'].value = bmi.Sumhe(sheet["W"][1:max])
        sheet[f'X{Sum_result1}'].value = bmi.Sumhe(sheet["X"][1:max])
        sheet[f'Y{Sum_result1}'].value = bmi.Sumhe(sheet["Y"][1:max])
        sheet[f'Z{Sum_result1}'].value = bmi.Sumhe(sheet["Z"][1:max])
        sheet[f'AA{Sum_result1}'].value = bmi.Sumhe(sheet["AA"][1:max])
        sheet[f'AB{Sum_result1}'].value = bmi.Sumhe(sheet["AB"][1:max])
        sheet[f'AC{Sum_result1}'].value = bmi.Sumhe(sheet["AC"][1:max])
        sheet[f'AD{Sum_result1}'].value = bmi.Sumhe(sheet["AD"][1:max])
        sheet[f'AE{Sum_result1}'].value = bmi.Sumhe(sheet["AE"][1:max])
        sheet[f'AF{Sum_result1}'].value = bmi.Sumhe(sheet["AF"][1:max])
        workbook.save("./report/附件四学生健康体检数据汇总.xlsx")
        workbook.close()
        self.fashe("附件4数据汇总追加完毕")

        workbook = openpyxl.load_workbook("./report/附件二常见疾病及缺点检出情况一.xlsx")
        self.fashe("读取附件二常见疾病及缺点检出情况一.xlsx")
        sheet = workbook['Sheet1']
        max = max = sheet.max_row
        self.fashe(f"附件二最大行数为：{max}")
        Sum_result1 = max + 1
        self.fashe(f"附件二汇总行数为：{Sum_result1}")
        sheet[f'A{Sum_result1}'].value = '数据汇总'
        sheet[f'B{Sum_result1}'].value = bmi.Sumhe(sheet["B"][1:max])
        sheet[f'C{Sum_result1}'].value = bmi.Sumhe(sheet["C"][1:max])
        sheet[f'D{Sum_result1}'].value = bmi.baifenbi(sheet[f'C{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'E{Sum_result1}'].value = bmi.Sumhe(sheet["E"][1:max])
        sheet[f'F{Sum_result1}'].value = bmi.baifenbi(sheet[f'E{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'G{Sum_result1}'].value = bmi.Sumhe(sheet["G"][1:max])
        sheet[f'H{Sum_result1}'].value = bmi.baifenbi(sheet[f'G{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'I{Sum_result1}'].value = bmi.Sumhe(sheet["I"][1:max])
        sheet[f'J{Sum_result1}'].value = bmi.baifenbi(sheet[f'I{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'K{Sum_result1}'].value = bmi.Sumhe(sheet["K"][1:max])
        sheet[f'L{Sum_result1}'].value = bmi.baifenbi(sheet[f'K{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'M{Sum_result1}'].value = bmi.Sumhe(sheet["M"][1:max])
        sheet[f'N{Sum_result1}'].value = bmi.baifenbi(sheet[f'M{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'O{Sum_result1}'].value = bmi.Sumhe(sheet["O"][1:max])
        sheet[f'P{Sum_result1}'].value = bmi.baifenbi(sheet[f'O{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'Q{Sum_result1}'].value = bmi.Sumhe(sheet["Q"][1:max])
        sheet[f'R{Sum_result1}'].value = bmi.baifenbi(sheet[f'Q{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'S{Sum_result1}'].value = bmi.Sumhe(sheet["S"][1:max])
        sheet[f'T{Sum_result1}'].value = bmi.baifenbi(sheet[f'S{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'U{Sum_result1}'].value = bmi.Sumhe(sheet["U"][1:max])
        sheet[f'V{Sum_result1}'].value = bmi.baifenbi(sheet[f'U{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        workbook.save("./report/附件二常见疾病及缺点检出情况一.xlsx")
        workbook.close()
        self.fashe("附件二数据汇总追加完毕")

        workbook = openpyxl.load_workbook("./report/附件三常见疾病及缺点检出情况二.xlsx")
        self.fashe("附件三常见疾病及缺点检出情况二.xlsx")
        sheet = workbook['Sheet1']
        max = max = sheet.max_row
        self.fashe(f"附件三最大行数为：{max}")
        Sum_result1 = max + 1
        self.fashe(f"附件三汇总行数为：{Sum_result1}")
        sheet[f'A{Sum_result1}'].value = '数据汇总'
        sheet[f'B{Sum_result1}'].value = bmi.Sumhe(sheet["B"][1:max])
        sheet[f'C{Sum_result1}'].value = bmi.Sumhe(sheet["C"][1:max])
        sheet[f'D{Sum_result1}'].value = bmi.baifenbi(sheet[f'C{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'E{Sum_result1}'].value = bmi.Sumhe(sheet["E"][1:max])
        sheet[f'F{Sum_result1}'].value = bmi.baifenbi(sheet[f'E{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'G{Sum_result1}'].value = bmi.Sumhe(sheet["G"][1:max])
        sheet[f'H{Sum_result1}'].value = bmi.baifenbi(sheet[f'G{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'I{Sum_result1}'].value = bmi.Sumhe(sheet["I"][1:max])
        sheet[f'J{Sum_result1}'].value = bmi.baifenbi(sheet[f'I{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'K{Sum_result1}'].value = bmi.Sumhe(sheet["K"][1:max])
        sheet[f'L{Sum_result1}'].value = bmi.baifenbi(sheet[f'K{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'M{Sum_result1}'].value = bmi.Sumhe(sheet["M"][1:max])
        sheet[f'N{Sum_result1}'].value = bmi.baifenbi(sheet[f'M{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'O{Sum_result1}'].value = bmi.Sumhe(sheet["O"][1:max])
        sheet[f'P{Sum_result1}'].value = bmi.baifenbi(sheet[f'O{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'Q{Sum_result1}'].value = bmi.Sumhe(sheet["Q"][1:max])
        sheet[f'R{Sum_result1}'].value = bmi.baifenbi(sheet[f'Q{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        sheet[f'S{Sum_result1}'].value = bmi.Sumhe(sheet["S"][1:max])
        sheet[f'T{Sum_result1}'].value = bmi.baifenbi(sheet[f'S{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)
        workbook.save("./report/附件三常见疾病及缺点检出情况二.xlsx")
        workbook.close()
        self.fashe("附件三数据汇总追加完毕")

        workbook = openpyxl.load_workbook("./report/附件一学生健康体检基本情况汇总.xlsx")
        self.fashe("附件一学生健康体检基本情况汇总.xlsx")
        sheet = workbook['Sheet1']
        max = max = sheet.max_row
        self.fashe(f"附件一最大行数为：{max}")
        Sum_result1 = max + 1
        self.fashe(f"附件一汇总行数为：{Sum_result1}")
        sheet[f'A{Sum_result1}'].value = '数据汇总'
        sheet[f'B{Sum_result1}'].value = bmi.Sumhe(sheet["B"][3:max])
        sheet[f'C{Sum_result1}'].value = bmi.Sumhe(sheet["C"][3:max])
        sheet[f'D{Sum_result1}'].value = bmi.Sumhe(sheet["D"][3:max])
        sheet[f'E{Sum_result1}'].value = bmi.baifenbi(sheet[f'D{Sum_result1}'].value, sheet[f'B{Sum_result1}'].value)

        workbook.save("./report/附件一学生健康体检基本情况汇总.xlsx")
        workbook.close()
        self.fashe("附件一数据汇总追加完毕")

    def Baogao(self):
        """
        自动生成报告
        """
        workbook = openpyxl.load_workbook("./report/附件四学生健康体检数据汇总.xlsx")
        sheet = workbook['Sheet1']
        # 获取最大行 用以读取最后一行汇总数据 写入报告
        max = sheet.max_row
        # 创建一个文档
        document = Document()
        # 设置正文字体类型、大小
        document.styles["Normal"].font.name = u'仿宋'
        document.styles["Normal"].font.size = Pt(16)
        document.styles["Normal"]._element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋')

        for sec in document.sections:
            # 设置页面边距(左上25毫米，右下15毫米)
            sec.top_margin = Cm(2.5)
            sec.left_margin = Cm(2.5)
            sec.right_margin = Cm(1.5)
            sec.bottom_margin = Cm(1.5)
            # 设置纸张大小(A4)
            sec.page_height = Mm(297)
            sec.page_width = Mm(210)
            # 设置页眉页脚距离
            sec.header_distance = Cm(1.5)
            sec.footer_distance = Cm(0.2)

        # 首页
        paragraph9 = document.add_paragraph()
        paragraph9 = document.add_paragraph()
        paragraph9 = document.add_paragraph()
        paragraph9 = document.add_paragraph()
        paragraph = document.add_paragraph()
        run = paragraph.add_run(f'{self.lineEdit.text()}\n学生健康体检结果分析报告')
        run.font.name = u'仿宋'
        run.font.size = Pt(32)
        run.bold = True
        # 标题居中对齐
        paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        # 标题加粗
        paragraph.bold = True
        paragraph1 = document.add_paragraph()
        paragraph1 = document.add_paragraph()
        paragraph1 = document.add_paragraph()
        paragraph1 = document.add_paragraph()
        paragraph1 = document.add_paragraph()
        paragraph2 = document.add_paragraph(f'受检单位：{self.lineEdit.text()}')
        paragraph2.bold = True
        paragraph2.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        paragraph3 = document.add_paragraph(f'体检机构：{self.lineEdit_2.text()}')
        paragraph3.bold = True
        paragraph3.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        paragraph4 = document.add_paragraph(f'健康咨询电话：{self.lineEdit_3.text()}')
        paragraph4.bold = True
        paragraph4.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        paragraph5 = document.add_paragraph(f'体检日期：{self.lineEdit_4.text()}')
        paragraph5.bold = True
        paragraph5.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        document.add_page_break()
        biaoti = document.add_paragraph('学生健康体检结果分析报告')
        biaoti.bold = True
        biaoti.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        zhengwen = document.add_paragraph(f'{self.lineEdit.text()}:')
        zhengwen.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
        zhengwen1 = document.add_paragraph(
            f'    根据四川省卫生厅、四川省教育厅关于印发《四川省中小学生健康体检管理办法》的通知（川卫办发〔2009〕424号）和《绵阳市游仙区教育和体育局办公室＜关于开展2020年中小学生健康体检工作的通知＞》('
            f'绵游教体办〔2020〕8号)文件要求，我中心于{self.lineEdit_4.text()}对贵校在校学生开展了健康体检，现将学生健康体检结果及存在的主要健康问题分析报告如下：')
        zhengwen1 = document.add_paragraph('    一、健康体检内容')
        zhengwen1 = document.add_paragraph('    1.既往病史询问。')
        zhengwen1 = document.add_paragraph('    2.体检项目：')
        zhengwen1 = document.add_paragraph('    2.1内科常规检查:心脏、肺部、肝脏、脾脏;')
        zhengwen1 = document.add_paragraph('    2.2外科检查:头部、颈部、胸部、脊柱、四肢、皮肤、淋巴结;')
        zhengwen1 = document.add_paragraph('    2.3五官科检查:裸眼（矫正）视力、沙眼、结膜炎、耳、鼻、喉；')
        zhengwen1 = document.add_paragraph('    2.4口腔科检查:龋齿、牙周组织;')
        zhengwen1 = document.add_paragraph('    2.5形体指标检查:身高、体重。')
        zhengwen1 = document.add_paragraph(
            '    其他项目均根据国家相关法律、法规规定所要求开展的检查项目或根据具体情况,进行适当增补。')
        zhengwen1 = document.add_paragraph('    二、结果分析意义')
        zhengwen1 = document.add_paragraph(
            '学龄儿童青少年时期是人体发育的重要时期，其身体素质状况决定了后期身体健康状况，事关中华民族的长远发展，是衡量国家综合国力的重要指标之一。为此，我中心抽调各科骨干组成体检组，严格按照《学生健康检查技术规范GB'
            '/T '
            '26343-2010'
            '》及其他相关健康体检管理规定，对参检学生进行了认真的检查，由分析小组对学生体检情况及各项数据进行了科学分析，旨在通过数据分析，全面掌握学生各形态和机能指标的增长规律、特点和变化趋势，分析其生长发育水平、评价学生现时营养状况及掌握疾病的发生、发展规律和现状，为学校体育卫生工作健康、有序地开展提供科学依据。')
        zhengwen1 = document.add_paragraph('    三、结果分析方法')
        zhengwen1 = document.add_paragraph(
            '我中心抽调临床经验丰富的医生组成体检结果分析小组，严格按照《学生健康检查技术规范GB/T 26343-2010》《学龄儿童青少年营养不良筛查WS/T '
            '456-2014》《7岁-18岁儿童青少年身高发育等级评价WS/T 612-2018》《学龄儿童青少年超重与肥胖筛查WS/T 586-2018》《7岁-18岁儿童青少年血压偏高筛查界值WS/T '
            '610-2018》《儿童青少年发育水平的综合评价GB/T '
            '31178-2014》等国家和卫生行业标准开展分析。通过统计体检学生各形态、机能指标的均数系列指标（均数、标准差等）和各常见疾病患病的检出情况，综合评价受检对象身高、体重、生长发育水平和现时身体健康状况，并提出健康指导意见。')
        zhengwen1 = document.add_paragraph('    四、结果分析内容')
        zhengwen1 = document.add_paragraph('   （一）学生参检情况')
        zhengwen2 = document.add_paragraph(
            f"   本次健康体检，贵校{max - 2}个班级应参加体检人数{sheet[f'B{max}'].value}名，实际参加体检{sheet[f'C{max}'].value}人，参检率{bmi.baifenbi(sheet[f'C{max}'].value, sheet[f'B{max}'].value)}，具体参检人数明细详见附件1。")
        zhengwen2 = document.add_paragraph('   （二）形态、机能发育指标分析')
        zhengwen2 = document.add_paragraph(
            '    通过对体检数据的汇总分析：贵校各年龄段学生形态、机能指标的发育符合学生生长发育的一般规律。身高、体重随年龄增长而增长。其中身高和体重出现明显增长趋势，显示出学生的体形出现向超重及肥胖发展的趋势，这与目前生活水平提高、生活节奏加快、生活方式改变，摄入过多高能量食物，对身体锻炼重视程度不够，缺乏有效锻炼均有直接关系，与肥胖和超重在学生中发生率逐年提高的趋势契合。')
        zhengwen2 = document.add_paragraph("   （三）生长发育水平及营养状况分析")
        zhengwen2 = document.add_paragraph(
            f"   通过对体检数据的汇总分析：贵校学生营养健康状况较好。男女生的正常体重和身高比率符合相关标准。学生实际体测人数为{sheet[f'C{max}'].value}人，体重偏轻男生{sheet[f'G{max}'].value}人，占总人数{bmi.baifenbi(sheet[f'G{max}'].value, sheet[f'C{max}'].value)}，女生{sheet[f'K{max}'].value}人，占总人数{bmi.baifenbi(sheet[f'K{max}'].value, sheet[f'C{max}'].value)}；体重超重男生{sheet[f'H{max}'].value}人，占总人数{bmi.baifenbi(sheet[f'H{max}'].value, sheet[f'C{max}'].value)}，女生{sheet[f'L{max}'].value}人，占总人数{bmi.baifenbi(sheet[f'L{max}'].value, sheet[f'C{max}'].value)}；肥胖男生{sheet[f'I{max}'].value}人，占总人数{bmi.baifenbi(sheet[f'I{max}'].value, sheet[f'C{max}'].value)}，女生{sheet[f'M{max}'].value}人，占总人数{bmi.baifenbi(sheet[f'M{max}'].value, sheet[f'C{max}'].value)}。男性生长迟缓{sheet[f'J{max}'].value}人，占总人数{bmi.baifenbi(sheet[f'J{max}'].value, sheet[f'C{max}'].value)}。女性生长迟缓{sheet[f'N{max}'].value}人，占总人数{bmi.baifenbi(sheet[f'N{max}'].value, sheet[f'C{max}'].value)}。其中肥胖需予以重视，儿童青少年时期是饮食行为建立和发展的关键时期，良好的饮食行为不仅保证了儿童良好的营养状态，而且会持续至成人对成人饮食行为的建立和健康产生深刻的影响。儿童青少年肥胖危害深远，不仅导致身心疾患和生理功能障碍，影响学习能力，更为严重的是儿童青少年肥胖可发展为成人肥胖，引起高血压、心脏病、糖尿病等慢性疾病，从而导致长期病态和早期死亡。")
        zhengwen3 = document.add_paragraph('   （四）常见疾病检出情况分析')
        zhengwen4 = document.add_paragraph(
            f"   从内科和外科检查情况来看，心脏异常人数{sheet[f'R{max}'].value}例，占比{bmi.baifenbi(sheet[f'R{max}'].value, sheet[f'C{max}'].value)}；肺部异常人数{sheet[f'S{max}'].value}例，占比{bmi.baifenbi(sheet[f'S{max}'].value, sheet[f'C{max}'].value)}；肝脏脾脏异常人数{sheet[f'T{max}'].value}例，占比{bmi.baifenbi(sheet[f'T{max}'].value, sheet[f'C{max}'].value)}；头部异常人数{sheet[f'U{max}'].value}例，占比{bmi.baifenbi(sheet[f'U{max}'].value, sheet[f'C{max}'].value)}；颈部异常人数{sheet[f'V{max}'].value}例，占比{bmi.baifenbi(sheet[f'V{max}'].value, sheet[f'C{max}'].value)}；胸部异常人数{sheet[f'W{max}'].value}例，占比{bmi.baifenbi(sheet[f'W{max}'].value, sheet[f'C{max}'].value)}；脊柱部位异常人数{sheet[f'X{max}'].value}例，占比{bmi.baifenbi(sheet[f'X{max}'].value, sheet[f'C{max}'].value)}；四肢异常人数{sheet[f'Y{max}'].value}例，占比{bmi.baifenbi(sheet[f'Y{max}'].value, sheet[f'C{max}'].value)}；皮肤异常人数{sheet[f'Z{max}'].value}例，占比{bmi.baifenbi(sheet[f'Z{max}'].value, sheet[f'C{max}'].value)}；淋巴结异常人数{sheet[f'AA{max}'].value}例，占比{bmi.baifenbi(sheet[f'AA{max}'].value, sheet[f'C{max}'].value)}；等项目（详见附件2）。从五官科、口腔科检查情况来看，耳异常人数{sheet[f'AB{max}'].value}例，占比{bmi.baifenbi(sheet[f'AB{max}'].value, sheet[f'C{max}'].value)}，鼻异常{sheet[f'AC{max}'].value}例，占比{bmi.baifenbi(sheet[f'AC{max}'].value, sheet[f'C{max}'].value)}。喉异常{sheet[f'AD{max}'].value}例，占比{bmi.baifenbi(sheet[f'AD{max}'].value, sheet[f'C{max}'].value)}。牙周疾病{sheet[f'AF{max}'].value}例，占比{bmi.baifenbi(sheet[f'AF{max}'].value, sheet[f'C{max}'].value)}。从眼科体检情况来看，轻度视力不良{sheet[f'O{max}'].value}例，占比{bmi.baifenbi(sheet[f'O{max}'].value, sheet[f'C{max}'].value)}；中度视力不良{sheet[f'P{max}'].value}例，占比{bmi.baifenbi(sheet[f'P{max}'].value, sheet[f'C{max}'].value)}；重度视力不良{sheet[f'Q{max}'].value}例，占比{bmi.baifenbi(sheet[f'Q{max}'].value, sheet[f'C{max}'].value)}；龋齿及龋坏人数{sheet[f'AE{max}'].value}人，占比{bmi.baifenbi(sheet[f'AE{max}'].value, sheet[f'C{max}'].value)}（详见附件3）。")
        zhengwen1 = document.add_paragraph('    五、健康指导意见')
        zhengwen1 = document.add_paragraph(
            '    （一）沙眼:沙眼是由沙眼衣原体引起的一种慢性传染性眼病。感染原因主要是由于不良的卫生习惯引起病原体的传播。因学生群体是沙眼的好发人群，并易反复感染，严重可致盲，学校应在平时注意加强卫生宣传教育，向学生普及沙眼防治知识。要求学生培养良好的卫生习惯。教育学生养成勤洗手、勤剪指甲、不用手擦眼睛，每天用餐巾纸或清洁的手帕擦眼睛。提倡一人一条毛巾，最好用流水洗脸、用除菌香皂或洗手液洗手，避免交叉感染。定期检查，发现问题及时告知家长，积极进行治疗。')
        zhengwen1 = document.add_paragraph(
            '    （三）龋齿:龋病是一种非自愈性疾病，是影响儿童青少年健康和生长发育最常见的口腔疾病之一。龋齿的形成与甜食和碳酸饮料进食过多、睡前不刷牙或刷牙方法不正确，以及牙齿自身本质情况有关。因此，学校要认真开展口腔卫生宣传教育，提高学生口腔健康意识，让学生了解龋病的危害及预防等口腔保健知识，培养学生养成良好的口腔卫生习惯。此外，要引导学生选用合适的牙刷及含氟牙膏，掌握正确的刷牙方法，做到饭后漱口，早晚刷牙。在饮食摄入方面，要求学生要尽量少食甜食、零食，多吃蔬菜水果。对已查出患有龋齿或龋患的学生，应通过填充等方式及早治疗。')
        zhengwen1 = document.add_paragraph(
            '    （四）肥胖:引起肥胖的主要原因是缺乏合理营养知识，热量摄取过多，尤其是甜食摄入过多，加之课业负担过重，体育锻炼时间过少，降低了热量的消耗。学校应通过对学生营养餐的不断改进，加强对学生营养知识的教育，改变其不良饮食习惯，加强校内外的体育锻炼，以降低超重和肥胖的发生。同时，要引导学生早餐以稀饭、馒头、包子为主；午餐荤素搭配，多吃蔬菜、水果，腌、辣、油炸、红烧等食物不宜多吃或尽量少吃；晚餐宜清淡。对患肥胖症的学生要进行膳食指导，鼓励其参加体育锻炼。')
        zhengwen1 = document.add_paragraph(
            '    （五）营养不良:学生营养不良与饮食习惯、缺少锻炼有较大关系。个别女生为了保持身材，刻意少吃，甚至出现厌食情绪，导致营养不良。一方面要普及营养知识，进行营养健康教育，另一方面，学校和老师应鼓励学生多参加体育锻炼。')
        zhengwen1 = document.add_paragraph(
            '    （六）扁桃体肿大(扁桃体炎):扁桃体肿大是一种咽扁桃体不正常肿大，分为急性扁桃体炎及慢性扁桃体炎，扁桃体炎发病原因主要是人体因劳累、受凉或其他原因而使抵抗力减弱，病原体迅速繁殖而引起，应尽早正规治疗。扁桃体一般3～10岁时最大，10岁以后逐渐萎缩，因此儿童时期的扁桃体炎是防治的重点。首先在于增强机体的抵抗力，加强锻炼，特别是冬季，要多参与户外活动，使身体对寒冷的适应能力增强，减少扁桃体发炎的机会，并注意劳逸结合，气温变化明显时注意保暖；保持口腔清洁，吃东西后要漱口；搞好环境卫生，室内应光线充足，空气流通；保持适宜的温度和湿度。对急性扁桃体炎的学生应及时就诊，合理休息。')
        zhengwen1 = document.add_paragraph(
            '    （七）甲状腺肿大:甲状腺肿大是以缺碘为主的代偿性甲状腺肿大，青年女性多见，一般不伴有甲状腺功能异常，散发性甲状腺肿大可有多种病因导致相似结果，即机体对甲状腺激素需求增加，或甲状腺激素生成障碍。学校应敦促学生家长定期带孩子进行健康体检，发现异常者需及时查清病因、对症治疗。')
        zhengwen1 = document.add_paragraph('    （八）其他检出的疾病和阳性体征及健康指导意见：')
        zhengwen1 = document.add_paragraph(
            '      1.脊柱弯曲：脊柱弯曲是学生中一种较常见的疾病。一般以侧弯最为多见，其次是脊柱前后轴弯曲，通过矫治可以恢复正常。对脊柱弯曲的预防应加强对学生的姿势教育，尤其对小学阶段的学生，要督促其养成良好的读写习惯，注意端正身体姿势，行走、读写时胸部自然挺直，两肩齐平向后扩展，站立时重心在两脚上，提倡用双肩背书包。学校与家庭应配备适合学生身高的课桌椅，鼓励学生多参加体育活动，认真做好早操和课间操。定期检查，早期发现，及时矫正。对体检学生脊柱异常者，要根据脊柱弯曲的方向及部位进行矫正操治疗；对于脊柱Ⅱ度以上弯曲者，应到医院进一步诊治。')
        zhengwen1 = document.add_paragraph(
            '      2.扁平足：扁平足青少年学生中常见的姿势缺陷之一。它影响走路的能力和身体的姿势。学生自身无不适感，只是在检查中发现，属于轻度，易于矫治。学校平时应鼓励学生参加体育活动，加强足部肌肉及韧带力量。')
        zhengwen1 = document.add_paragraph(
            '      3.心、肺、肝、脾等重要脏器：心脏杂音分为生理性杂音和病理性杂音，临床上青少年和儿童多见于生理性杂音，杂音性质柔和、强度在2/6级以下；病理性杂音见于心脏器质性病变等。心律失常（窦性心动过速、窦性心动过缓、偶发早搏、心律不齐等）在平时体检中比较常见，在排除器质性病变后，无需特殊治疗。建议：对心脏听诊有杂音疑问和心律失常的学生要告知其家长，应进一步到综合医院心内科就诊，完善心脏彩超和心电图等检查，排除是否存在器质性心脏疾病，以便得到及时诊断和治疗。检查并确诊为心血管系统疾病的学生应定期诊治，避免参加剧烈运动，预防感冒。')
        zhengwen1 = document.add_paragraph(
            '      综合上述学生体检结果，贵校学生的视力低下情况较显著，龋齿比例高，部分学生存在超重和肥胖现象，学生营养状况仍需要持续关注。学生健康应引起家长、学校及社会各界的重视。')
        zhengwen1 = document.add_paragraph('       附件：1.附件一学生健康体检基本情况汇总表')
        zhengwen1 = document.add_paragraph('       附件：2.附件二常见疾病及缺点检出情况表一')
        zhengwen1 = document.add_paragraph('       附件：3.附件三常见疾病及缺点检出情况表二')
        zhengwen1 = document.add_paragraph('       附件：4.附件四学生健康体检数据汇总')
        zhengwen1 = document.add_paragraph(f'       附件：5.{self.lineEdit.text()}学校体检班级明细表')
        zhengwen1 = document.add_paragraph()
        zhengwen1 = document.add_paragraph()
        zhengwen1 = document.add_paragraph(f"                        {self.lineEdit_2.text()}")
        zhengwen1 = document.add_paragraph(f"                                   {datetime.date.today()}")
        # 保存文档
        document.save(f'./report/{self.fileName1}学生健康体检结果分析报告.docx')
        time.sleep(2)
        return self.fashe("报告生成完毕。可以送总检了")


if __name__ == '__main__':
    starttime = datetime.datetime.today()
    app = QApplication(sys.argv)
    cn = School()
    bmi = BMI对比公式.bmi()
    cn.show()
    sys.exit(app.exec_())
